from multiprocessing import Process
import os, time
# 创建进程
#1 Process创建进程
# 函数方式创建子进程
def sub_process(name):
    print(f'子进程的名称：{name}, 子进程的PID是：{os.getpid()}, 父进程的PID是：{os.getppid()}')
    time.sleep(1)


if __name__ == '__main__':
    print('父进程开始执行')
    if 1:
        # 创建子进程
        p1 = Process(target=sub_process, args=('进程1',))
        # 启动子进程
        p1.start()
        #终止进程
        # p1.terminate()
        # 判断执行是否执行完毕
        print(p1.name, '是否仍在执行：', p1.is_alive())
        # 获取进程的PID值
        print(p1.name, 'pid是：', p1.pid)

        # 缺少join语句，将导致主进程在子进程之前结束
        p1.join()   # 主进程要等待p1执行结束，阻塞主进程

        print(p1.name, '是否仍在执行：', p1.is_alive())

    print('父进程执行结束')
print('-'*50)

#2 继承式创建
class SubProcess(Process):
    # 编写初始化方法
    def __init__(self, name):
        super().__init__()  # 继承父类初始化
        self.name = name

    #重写父类的run方法
    def run(self):
        print(f'子进程的名称：{self.name}, 子进程的PID是：{os.getpid()}, 父进程的PID是：{os.getppid()}')

if __name__ == '__main__':
    print('父进程开始执行')
    if 1:
        p1 = SubProcess('进程1')  # 没有target，执行run方法
        p1.start()

        p1.join()

    print('父进程执行结束')